package com.ydm.myapp001.adapter;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;

import com.tonicartos.widget.stickygridheaders.StickyGridHeadersSimpleAdapter;
import com.ydm.myapp001.R;
import com.ydm.myapp001.bean.User;

import java.util.List;

/**
 * Created by yangdongming on 2017/12/29.
 */

public class StickyGridAdapter extends BaseAdapter implements StickyGridHeadersSimpleAdapter{
    private List<User> listItems;
    private LayoutInflater layoutInflater;//填充器对象, 这个对象可以帮助我们绘制出items项

    public StickyGridAdapter(Context context) {
        layoutInflater = LayoutInflater.from(context);
    }

    public List<User> getListItems() {
        return listItems;
    }

    public void setListItems(List<User> listItems) {
        this.listItems = listItems;
    }

    //获取当前items项的大小，也可以看成是数据源的大小
    @Override
    public int getCount() {
        return listItems.size();
    }

    //根据item的下标获取到View对象
    @Override
    public Object getItem(int i) {
        return null;
    }

    //获取到items的id
    @Override
    public long getItemId(int i) {
        return 0;
    }

    /*
     * 根据传入item的下标，获取到view对象
     * int position,      表示item所在listView中的下标，也是在数据源中下标所对应的数据
     * View convertView,  缓存机制，当一些item项滑出屏幕的时候，会创建新的View对象，这样会使得内存资源占据，
     *                                  所以使用convertView判断是否为空，如果为空的说明item没有滑出，需要创建新的view对象
     *                          如果不为空，说明已经滑出类屏幕所以使用convertView ，view = convertView，
     *                                  可以把convert 理解为滑出的view对象
     * ViewGroup parent   视图组对象，即 表示当前绘制的items项所属的ListView对象。
     * */
    @Override
    public View getView(int i, View view, ViewGroup viewGroup) {


        if (view == null) {
            /*
            调用打气筒中的 inflate(int resource, ViewGroup root) 方法
            第一个参数是一个布局文件对象，通过这个布局文件，inflater会在这布局文件中绘制items项
            第二个参数是需不需要将第一个参数中的那个布局文件嵌入到另外一个布局文件中。如果要写上布局文件的id，如果不需要直接写null
            */
            view = layoutInflater.inflate(R.layout.item_gridview, null);
        }


        User u = listItems.get(i);//通过回调这个方法传过来的position参数获取到指定数据源中的对象

        //找到布局文件中的控件
        ImageView pic = view.findViewById(R.id.image);
        TextView name = view.findViewById(R.id.text);
        pic.setImageResource(u.getPic());//从数据源中获取头像 设置到布局文件的ImageView控件中。
        name.setText(u.getName());//从数据源中获取名字 设置到布局文件的TextView控件中。


        return view;
    }


    @Override
    public View getHeaderView(int i, View view, ViewGroup viewGroup) {


        if (view == null) {
            view = layoutInflater.inflate(R.layout.sectionheader_gridview, null);
        }

        User user = listItems.get(i);
        TextView textView = view.findViewById(R.id.headerText);
        textView.setText(user.getUserGroundName());

        return view;
    }


    /**
     * 获取HeaderId, 只要HeaderId不相等就添加一个Header
     */
    @Override
    public long getHeaderId(int i) {
        return listItems.get(i).getHeaderId();
    }
}
